package com.uncp.comisiondeadmision.util.entity;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Table(name = "postulante")
public class EPostulante implements Serializable {

	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "CODPOSTULANTE", table = "postulante")
	private Integer int_cod_postu;
	@Column(name = "NOMBRES")
	private String str_nom_postu;
	@Column(name = "APEPAT")
	private String str_apePat_postu;
	@Column(name = "APEMAT")
	private String str_apeMat_postu;
	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "FECHANAC")
	private Date str_fecNac_postu;
	@Column(name = "DNI")
	private String str_dni_postu;
	@Column(name = "EMAIL")
	private String str_email_postu;
	@Column(name = "TELEFONO")
	private String str_telefo_postu;
	@Column(name = "FOTO")
	private String str_urlFoto_postu;
	@Column(name = "ESTADO")
	private String str_estado_postu;

	@ManyToOne
	@JoinColumn(name = "CODCARRERA", nullable = false)
	private ECarrera carrera;

	// bi-directional many-to-one association to CarnetDTO
	@OneToMany(mappedBy = "postulante")
	private List<ECarnet> carnets;

	public ECarrera getCarrera() {
		return carrera;
	}

	public void setCarrera(ECarrera carrera) {
		this.carrera = carrera;
	}

	public List<ECarnet> getCarnets() {
		return carnets;
	}

	public void setCarnets(List<ECarnet> carnets) {
		this.carnets = carnets;
	}

	// Relacionando con la tabla TipoModalidad
	@ManyToOne
	@JoinColumn(name = "CODTIPOMODALIDAD", nullable = false)
	private ETipomodalidad tipoModalidad;

	// Relacionando con la tabla Solicitud
	@OneToMany(fetch = FetchType.LAZY, mappedBy = "postulante", cascade = CascadeType.ALL)
	private List<ESolicitud> solicitudes;

	@OneToMany(fetch = FetchType.LAZY, mappedBy = "postulante", cascade = CascadeType.ALL)
	private List<ECdp> cdps;

	public EPostulante() {
		tipoModalidad = new ETipomodalidad();
		carrera = new ECarrera();
	}

	public Integer getInt_cod_postu() {
		return int_cod_postu;
	}

	public void setInt_cod_postu(Integer int_cod_postu) {
		this.int_cod_postu = int_cod_postu;
	}

	public String getStr_nom_postu() {
		return str_nom_postu;
	}

	public void setStr_nom_postu(String str_nom_postu) {
		this.str_nom_postu = str_nom_postu;
	}

	public String getStr_apePat_postu() {
		return str_apePat_postu;
	}

	public void setStr_apePat_postu(String str_apePat_postu) {
		this.str_apePat_postu = str_apePat_postu;
	}

	public String getStr_apeMat_postu() {
		return str_apeMat_postu;
	}

	public void setStr_apeMat_postu(String str_apeMat_postu) {
		this.str_apeMat_postu = str_apeMat_postu;
	}

	public Date getStr_fecNac_postu() {
		return str_fecNac_postu;
	}

	public void setStr_fecNac_postu(Date str_fecNac_postu) {
		this.str_fecNac_postu = str_fecNac_postu;
	}

	public String getStr_dni_postu() {
		return str_dni_postu;
	}

	public void setStr_dni_postu(String str_dni_postu) {
		this.str_dni_postu = str_dni_postu;
	}

	public String getStr_email_postu() {
		return str_email_postu;
	}

	public void setStr_email_postu(String str_email_postu) {
		this.str_email_postu = str_email_postu;
	}

	public String getStr_telefo_postu() {
		return str_telefo_postu;
	}

	public void setStr_telefo_postu(String str_telefo_postu) {
		this.str_telefo_postu = str_telefo_postu;
	}

	public String getStr_urlFoto_postu() {
		return str_urlFoto_postu;
	}

	public void setStr_urlFoto_postu(String str_urlFoto_postu) {
		this.str_urlFoto_postu = str_urlFoto_postu;
	}

	public String getStr_estado_postu() {
		return str_estado_postu;
	}

	public void setStr_estado_postu(String str_estado_postu) {
		this.str_estado_postu = str_estado_postu;
	}

	public ETipomodalidad getTipoModalidad() {
		return tipoModalidad;
	}

	public void setTipoModalidad(ETipomodalidad tipoModalidad) {
		this.tipoModalidad = tipoModalidad;
	}

	public List<ESolicitud> getSolicitudes() {
		return solicitudes;
	}

	public void setSolicitudes(List<ESolicitud> solicitudes) {
		this.solicitudes = solicitudes;
	}

	public List<ECdp> getCdps() {
		return cdps;
	}

	public void setCdps(List<ECdp> cdps) {
		this.cdps = cdps;
	}

	/**
	 * Metodo que devuelve el codigo y nombre completo del Postulante
	 * 
	 * @return
	 */
	public String getNombreCompleto() {

		return int_cod_postu + "-" + str_nom_postu + " " + str_apePat_postu
				+ " " + str_apeMat_postu;
	}

	/**
	 * Metodo encargado de obtener el estado de un Postulante
	 * 
	 * @param estado
	 *            define el estado
	 * @return <b>String</b> Estado del Postulante
	 */
	public static String estado(int estado) {

		if (estado == 1) {
			return "Pendiente";
		} else if (estado == 2) {
			return "Activo";
		} else
			return "error";

	}

}
